import router, { asyncRoutes } from '@/router'
import store from '@/store'
// import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style

// 导入设置页面的标题模块
import getPageTitle from '@/utils/get-page-title'
const whiteList = ['/login', '/404']// 白名单
// 路由前置守卫
router.beforeEach(async(to, from, next) => {
  document.title = getPageTitle(to.meta.title)// 设置页面标题

  NProgress.start()
  // 1.获取token
  const token = store.state.user.token
  // 2.判断token是否存在
  if (token) {
    // 一.token存在的情况
    // 判断访问的是否是登录页
    if (to.path === '/login') {
      next('/')// 留在主页
    } else {
      if (!store.getters.userId) {
        const menus = await store.dispatch('user/getuserInfo')// '模块名/方法名'
        const filterRoutes = asyncRoutes.filter(item => {
          const routeName = item.children[0].name
          return menus.includes(routeName)
        })

        // 通过addRoutes添加的路由是存放在内存中的
        router.addRoutes(filterRoutes)
        store.commit('permission/setRoutes', filterRoutes)

        filterRoutes.push({ path: '*', redirect: '/404', hidden: true })
        next({
          path: to.path,
          replace: true
        })
      }

      next()// 放行,这里下login就死循环了切记
    }
  } else {
    // 二.token不存在的情况
    if (whiteList.includes(to.path)) {
      // 看是否在白名单中(不需要token就能访问的页面)

      next()// 放行
    } else {
      next('/login')// 回登录页
    }
  }
  NProgress.done()
})
router.afterEach(() => {
  NProgress.done()
})

